A communication bus is typically used to connect peripheral devices, such as discs, tapes, printers, and others, to computers. To enable use of a variety of peripheral devices--often made by different manufacturers--with any one of a variety of computers--typically made by other manufacturers--certain buses for connecting the peripheral devices to computers have been standardized. An example of such a standardized bus is the Small Computer System Interface (SCSI) bus.
To enable a computer to communicate with its peripheral devices, the computer typically includes control mechanisms called peripheral device drivers or target drivers. A device driver controls a particular class of devices, such as discs or tapes. It receives requests for input and output operations from requestors--illustratively user processes executing on the computer, --generates the necessary commands for devices to perform desired operations, sends the commands over the communication bus to the devices, receives responses to the commands from the devices over the bus, and returns the responses to the requestors.
A device driver operates within the environment of, and consequently must interface with, other control mechanisms of the particular computer that it is located on. An example of such a control mechanism is a host adapter driver that controls a hardware unit that interfaces the SCSI bus to an I/0 bus or system bus of the computer. Such control mechanisms typically differ from computer to computer, as does the manner in which they interact with the device drivers. Consequently, whereas a peripheral device can be ported, i.e., used by a number of different computers, without modification if those computers use the same standard bus, the device driver for that device generally cannot be so ported, but must be redesigned or modified for each new operating environment. Whereas a standardized bus such as the SCSI bus solves the problem of lack of portability of peripheral devices, it does not solve the problem of lack of portability of the device drivers for those devices. Furthermore, the design of a device driver may be rendered very complex by virtue of the interactions demanded of the device driver by the environment that it must cooperate with. A problem in the art, therefore, is the lack of portability of peripheral device drivers between different computers, and the failure by many computers to support a simple driver design.